//package com.example.wechat.controller;
//
//import java.security.Principal;
//import java.time.LocalDateTime;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.messaging.handler.annotation.MessageMapping;
//import org.springframework.messaging.handler.annotation.SendTo;
//import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
//import org.springframework.messaging.simp.SimpMessagingTemplate;
//import org.springframework.stereotype.Controller;
//
//import com.example.project.core.controller.BaseController;
//import com.example.project.entity.User;
//import com.example.project.utils.StringUtils;
//import com.example.wechat.mapper.WeChatMapper;
//import com.example.wechat.model.WechatMessage;
//
//@Controller
//public class ChatController extends BaseController {
//
//	/**
//	 * 从Principal对象中提取用户ID
//	 */
//	private Long getUserFromPrincipal(Principal principal) {
//		try {
//			// 使用反射从ObjectPrincipal中提取User对象
//			java.lang.reflect.Field objectField = principal.getClass().getDeclaredField("object");
//			objectField.setAccessible(true);
//			Object userObject = objectField.get(principal);
//
//			if (userObject instanceof User) {
//				User user = (User) userObject;
//				return user.getUserId();
//			}
//		} catch (Exception e) {
//			// 如果反射失败，返回默认用户ID
//			return 1L; // 默认管理员用户ID
//		}
//		return 1L; // 默认管理员用户ID
//	}
//
//	@Autowired
//	private WeChatMapper wechatMapper;
//
//	@Autowired
//	private SimpMessagingTemplate messagingTemplate;
//
//	/**
//	 * 发送私聊消息
//	 */
//	@MessageMapping("/chat.send")
//	@SendTo("/topic/public")
//	public WechatMessage sendMessage(WechatMessage message, Principal principal,
//			SimpMessageHeaderAccessor headerAccessor) {
//		// 从WebSocket会话属性中获取用户ID
//		Long userId = (Long) headerAccessor.getSessionAttributes().get("userId");
//		System.out.println("=== 收到消息处理开始 ===");
//		System.out.println("会话属性中的userId: " + userId);
//		System.out.println("Principal: " + (principal != null ? principal.getName() : "null"));
//		System.out.println("消息内容: " + message.getContent());
//
//		if (userId == null) {
//			System.out.println("会话属性中没有userId，尝试从Principal获取");
//			userId = getUserFromPrincipal(principal);
//			System.out.println("从Principal获取的userId: " + userId);
//		}
//
//		String fromUser = String.valueOf(userId);
//		message.setFromUser(fromUser);
//		System.out.println("消息发送者设置为: " + fromUser);
//		message.setSendTime(LocalDateTime.now());
//		message.setMessageType(1); // 文本消息
//		message.setIsRead(0);
//		message.setIsRecalled(0);
//		message.setCreateTime(LocalDateTime.now());
//		message.setUpdateTime(LocalDateTime.now());
//		message.setDelFlag(0);
//
//		// 保存消息到数据库
//		wechatMapper.insertWechatMessage(message);
//
//		// 如果是私聊，发送给特定用户
//		if (StringUtils.isNotEmpty(message.getTo())) {
//			String toUser = message.getTo();
//			System.out.println("=== 后端消息发送日志开始 ===");
//			System.out.println("🚀 发送消息给用户: " + toUser + ", 消息内容: " + message.getContent());
//			System.out.println("目标路径: /user/" + toUser + "/queue/private");
//			System.out.println("消息ID: " + message.getId());
//			System.out.println("消息时间: " + message.getSendTime());
//			System.out.println("当前会话ID: " + headerAccessor.getSessionId());
//
//			// 发送给目标用户
//			try {
//				messagingTemplate.convertAndSendToUser(toUser, "/queue/private", message);
//				System.out.println("✅ 成功发送消息给用户: " + toUser);
//			} catch (Exception e) {
//				System.out.println("❌ 发送消息给用户 " + toUser + " 失败: " + e.getMessage());
//			}
//
//			// 同时发送给自己一份，用于显示
//			System.out.println("发送消息给自己: " + fromUser + ", 消息内容: " + message.getContent());
//			System.out.println("目标路径: /user/" + fromUser + "/queue/private");
//			try {
//				messagingTemplate.convertAndSendToUser(fromUser, "/queue/private", message);
//				System.out.println("✅ 成功发送消息给自己: " + fromUser);
//			} catch (Exception e) {
//				System.out.println("❌ 发送消息给自己 " + fromUser + " 失败: " + e.getMessage());
//			}
//
//			System.out.println("=== 后端消息发送日志结束 ===");
//		} else if (message.getGroupId() != null) {
//			// 群聊消息发送到群组
//			System.out.println("发送群聊消息到群组: " + message.getGroupId() + ", 消息内容: " + message.getContent());
//			messagingTemplate.convertAndSend("/topic/group." + message.getGroupId(), message);
//		}
//
//		return message;
//	}
//
//	/**
//	 * 发送图片消息
//	 */
//	@MessageMapping("/chat.send.image")
//	public void sendImageMessage(WechatMessage message, Principal principal, SimpMessageHeaderAccessor headerAccessor) {
//		// 从WebSocket会话属性中获取用户ID
//		Long userId = (Long) headerAccessor.getSessionAttributes().get("userId");
//		if (userId == null) {
//			userId = getUserFromPrincipal(principal);
//		}
//		String fromUser = String.valueOf(userId);
//		message.setFromUser(fromUser);
//		message.setSendTime(LocalDateTime.now());
//		message.setMessageType(2); // 图片消息
//		message.setIsRead(0);
//		message.setIsRecalled(0);
//		message.setCreateTime(LocalDateTime.now());
//		message.setUpdateTime(LocalDateTime.now());
//		message.setDelFlag(0);
//
//		wechatMapper.insertWechatMessage(message);
//
//		if (message.getTo() != null && !message.getTo().isEmpty()) {
//			String toUser = message.getTo();
//			messagingTemplate.convertAndSendToUser(toUser, "/queue/private", message);
//			messagingTemplate.convertAndSendToUser(fromUser, "/queue/private", message);
//		} else if (message.getGroupId() != null) {
//			messagingTemplate.convertAndSend("/topic/group." + message.getGroupId(), message);
//		}
//	}
//
//	/**
//	 * 标记消息已读
//	 */
//	@MessageMapping("/chat.read")
//	public void markAsRead(Long messageId, Principal principal, SimpMessageHeaderAccessor headerAccessor) {
//		// 从WebSocket会话属性中获取用户ID
//		Long userId = (Long) headerAccessor.getSessionAttributes().get("userId");
//		if (userId == null) {
//			userId = getUserFromPrincipal(principal);
//		}
//		String currentUserId = String.valueOf(userId);
//		WechatMessage message = wechatMapper.selectById(messageId);
//		if (message != null && message.getTo().equals(currentUserId)) {
//			message.setIsRead(1);
//			message.setReadTime(LocalDateTime.now());
//			wechatMapper.updateById(message);
//
//			// 通知发送者消息已读
//			messagingTemplate.convertAndSendToUser(message.getFromUser(), "/queue/read", messageId);
//		}
//	}
//
//	/**
//	 * 处理输入状态
//	 */
//	@MessageMapping("/chat.typing")
//	@SendTo("/topic/typing")
//	public String handleTyping(String typingData, Principal principal, SimpMessageHeaderAccessor headerAccessor) {
//		// 从WebSocket会话属性中获取用户ID
//		Long userId = (Long) headerAccessor.getSessionAttributes().get("userId");
//		if (userId == null) {
//			userId = getUserFromPrincipal(principal);
//		}
//		// typingData 包含目标用户ID和状态
//		return String.valueOf(userId) + "|@|" + typingData;
//	}
//
//	/**
//	 * 撤回消息
//	 */
//	@MessageMapping("/chat.recall")
//	public void recallMessage(Long messageId, Principal principal, SimpMessageHeaderAccessor headerAccessor) {
//		// 从WebSocket会话属性中获取用户ID
//		Long userId = (Long) headerAccessor.getSessionAttributes().get("userId");
//		if (userId == null) {
//			userId = getUserFromPrincipal(principal);
//		}
//		String currentUserId = String.valueOf(userId);
//		WechatMessage message = wechatMapper.selectById(messageId);
//		if (message != null && message.getFromUser().equals(currentUserId)) {
//			// 检查消息发送时间是否在2分钟内
//			LocalDateTime twoMinutesAgo = LocalDateTime.now().minusMinutes(2);
//			if (message.getSendTime().isAfter(twoMinutesAgo)) {
//				message.setIsRecalled(1);
//				message.setRecallTime(LocalDateTime.now());
//				wechatMapper.updateById(message);
//
//				// 通知撤回
//				if (message.getTo() != null && !message.getTo().isEmpty()) {
//					messagingTemplate.convertAndSendToUser(message.getTo(), "/queue/recall", messageId);
//					messagingTemplate.convertAndSendToUser(message.getFromUser(), "/queue/recall", messageId);
//				} else if (message.getGroupId() != null) {
//					messagingTemplate.convertAndSend("/topic/group." + message.getGroupId() + ".recall", messageId);
//				}
//			}
//		}
//	}
//
//	/**
//	 * 获取未读消息数
//	 */
//	@MessageMapping("/chat.unread.count")
//	public void getUnreadCount(String targetUser, Principal principal, SimpMessageHeaderAccessor headerAccessor) {
//		// 从WebSocket会话属性中获取用户ID
//		Long userId = (Long) headerAccessor.getSessionAttributes().get("userId");
//		if (userId == null) {
//			userId = getUserFromPrincipal(principal);
//		}
//		String currentUserId = String.valueOf(userId);
//		Long unreadCount = wechatMapper.countUnreadByFromAndTo(targetUser, currentUserId);
//		messagingTemplate.convertAndSendToUser(currentUserId, "/queue/unread.count", unreadCount);
//	}
//
//	/**
//	 * 在线状态更新
//	 */
//	@MessageMapping("/chat.online")
//	@SendTo("/topic/online")
//	public String updateOnlineStatus(String status, Principal principal, SimpMessageHeaderAccessor headerAccessor) {
//		// 从WebSocket会话属性中获取用户ID
//		Long userId = (Long) headerAccessor.getSessionAttributes().get("userId");
//		if (userId == null) {
//			userId = getUserFromPrincipal(principal);
//		}
//		return String.valueOf(userId) + "|@|" + status;
//	}
//}